// 引入electron并创建一个Browserwindow
const {app, BrowserWindow,ipcMain } = require('electron');
const { autoUpdater } = require('electron-updater');
const path = require('path');
const url = require('url');

//Electron应用配置文件
const AppInfo = {
  "updateApp":{
      "uploadUrl":"http://127.0.0.1/verson/" //更新地址
  },
  "startApp":{
      "devUrl":"http://localhost:3000/", //开发地址
      "proUrl":path.join(__dirname,"dist/index.html")//打包渲染进程入口地址
  }
};

// 保持window对象的全局引用,避免JavaScript对象被垃圾回收时,窗口被自动关闭.
let mainWindow = {};

//创建浏览器窗口 窗口监听事件
function createWindow () {
//创建浏览器窗口,宽高自定义具体大小你开心就好
  mainWindow = new BrowserWindow({width: 800, height: 600})
  
  if (process.env.NODE_ENV == 'development') {
    //开发环境 加载 方便热更新
    mainWindow.loadURL(AppInfo.startApp.devUrl);
    // 打开开发者工具，默认不打开
    mainWindow.webContents.openDevTools()
  }else{
    // 加载应用----electron 打包  ---也就是 electron 运行时的入口文件
    mainWindow.loadURL(url.format({
        pathname: AppInfo.startApp.proUrl,
        protocol: 'file:',
        slashes: true
    }))
  }

  // 关闭window时触发下列事件.
  mainWindow.on('closed', function () {
    mainWindow = null
  })
}

//更新事件
!function updateHandle() {

      let message = {
  
          error: '检查更新出错',
  
          checking: '正在检查更新……',
  
          updateAva: '检测到新版本，正在下载……',
  
          updateNotAva: '现在使用的就是最新版本，不用更新',
  
      };
  
      const os = require('os');
  
      const uploadUrl =  AppInfo.updateApp.uploadUrl; // 下载地址，不加后面的.exe
  
      autoUpdater.setFeedURL(uploadUrl);
  
      autoUpdater.on('error', function (error) {
  
          sendUpdateMessage(message.error)
  
      });
  
      autoUpdater.on('checking-for-update', function () {
  
          sendUpdateMessage(message.checking)
  
      });
  
      autoUpdater.on('update-available', function (info) {
  
          sendUpdateMessage(message.updateAva)
  
      });
  
      autoUpdater.on('update-not-available', function (info) {
  
          sendUpdateMessage(message.updateNotAva)
  
      });
  
      // 更新下载进度事件
      autoUpdater.on('download-progress', function (progressObj) {
  
          mainWindow.webContents.send('downloadProgress', progressObj)
  
      });
  
      autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
  
          ipcMain.on('isUpdateNow', (e, arg) => {
          console.log(arguments);
          console.log("开始更新");
  
          //some code here to handle event
  
          autoUpdater.quitAndInstall();
  
      });
      mainWindow.webContents.send('isUpdateNow')
  });
  ipcMain.on("checkForUpdate",()=>{
      //执行自动更新检查
      autoUpdater.checkForUpdates();
  });
}()
  
// 通过main进程发送事件给renderer进程，提示更新信息
function sendUpdateMessage(text) {
  mainWindow.webContents.send('message', text)
}

// 当 Electron 完成初始化并准备创建浏览器窗口时调用此方法
app.on('ready', createWindow)

// 所有窗口关闭时退出应用.
app.on('window-all-closed', function () {
  // macOS中除非用户按下 `Cmd + Q` 显式退出,否则应用与菜单栏始终处于活动状态.
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
   // macOS中点击Dock图标时没有已打开的其余应用窗口时,则通常在应用中重建一个窗口
  if (mainWindow === null) {
    createWindow()
  }
})